package sf_time

import (
	"math/rand"
	"time"
)

type FloatGenerator struct {
	min      float64
	max      float64
	decimals int
}

func NewFloatGenerator(min, max float64, decimals int) *FloatGenerator {
	rand.Seed(time.Now().UnixNano())
	return &FloatGenerator{
		min:      min,
		max:      max,
		decimals: decimals,
	}
}

// Generate 生成指定范围内的随机浮点数
func (g *FloatGenerator) Generate() float64 {
	// 计算范围和精度因子
	rangeValue := g.max - g.min
	factor := pow(10, g.decimals)

	// 生成整数随机数，然后转换为浮点数
	randomInt := rand.Intn(int(rangeValue*float64(factor)) + 1)
	result := g.min + float64(randomInt)/float64(factor)

	return round(result, g.decimals)
}

// GenerateMultiple 生成多个随机值
func (g *FloatGenerator) GenerateMultiple(count int) []float64 {
	results := make([]float64, count)
	for i := 0; i < count; i++ {
		results[i] = g.Generate()
	}
	return results
}

// 辅助函数：计算幂
func pow(base, exponent int) int {
	result := 1
	for i := 0; i < exponent; i++ {
		result *= base
	}
	return result
}

// 辅助函数：四舍五入到指定小数位
func round(value float64, decimals int) float64 {
	factor := float64(pow(10, decimals))
	return float64(int(value*factor+0.5)) / factor
}
